package model

import (
	"gitee.com/xuxinzhi2206/corehub/database/mysql"
	"gorm.io/gorm"
	"time"
)

// 签到表
type Clocking struct {
	gorm.Model
	UserId int64     `gorm:"column:user_id;type:int(11);"`
	Count  int64     `gorm:"column:count;type:int(11);default:1"`
	Data   time.Time `gorm:"column:data;type:datetime;"`
	Status int64     `gorm:"column:status;type:tinyint(2);commit:1未签到,2已签到"`
}

// 补签表
type RetroactiveClocking struct {
	gorm.Model
	UserId int64     `gorm:"column:user_id;type:int(11);"`
	Data   time.Time `gorm:"column:data;type:datetime;"`
}

// 创建签到
func (c *Clocking) CreateClock() (*Clocking, error) {
	return c, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Create(c).Error
	})
}

// 获取今天是否签到
func (c *Clocking) GetClockInfo() (res Clocking, err error) {
	return res, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Where("user_id =?", c.UserId).First(&res).Error
	})
}

// 查询今日是否签到
func (c *Clocking) GetClockInfos() (*Clocking, error) {
	return c, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Where("user_id =?", c.UserId).First(&c).Error
	})
}

// 获取签到记录
func (c *Clocking) GetClockHistoryRecord() (info []*Clocking, err error) {
	return info, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Where("user_id =?", c.UserId).Find(&info).Error
	})
}

// 修改
func (c *Clocking) UpdateClockIn() (res Clocking, err error) {
	return res, mysql.WithMysql(func(db *gorm.DB) error {
		return db.Model(&res).Where("user_id =?", c.UserId).Update("count", gorm.Expr("count+1")).Error
	})
}

// 创建补签
func (r *RetroactiveClocking) RetroactiveClockIn() error {
	return mysql.WithMysql(func(db *gorm.DB) error {
		return db.Create(r).Error
	})
}
